/**
 * InterfazLinhaComandos.java
 */
package nonGUI;

import cliente.*;
import gui.InterfazGrafico;

import java.io.*;

/**
 * Esta e a interfaz por linha de comandos tanto para o cliente SMTP 
 * coma do POP3
 * 
 * @author Juan Jose Ferreiro Ferreiro
 */
public class InterfazLinhaComandos {

    /**
     * Le ata que atopa a secuencia "\n.\n"
     * 
     * @param in
     * @return Todo o que se liu pola entrada {@code in}
     * @throws java.io.IOException
     */
    public static String leAtaPunto(BufferedReader in) throws IOException {
        String res = "";
        String tmp = "";
        do {
            tmp = in.readLine();
            if (tmp.equalsIgnoreCase(".")) {
                break;
            }
            res += "\n" + tmp;
        } while (true);
        res = res.substring(1); // Para elimina-lo \n inicial

        return res;
    }

    /**
     * 
     * @param args Argumentos da linha de comandos
     */
    public static void main(String[] args) {
        try {
            BufferedReader linhaComandos = new BufferedReader(new InputStreamReader(System.in));

            System.out.println("1 - Cliente SMTP\n2 - Cliente POP3\n3 - Interfaz grafico para SMTP");
            int decision = new Integer(linhaComandos.readLine());
            if (decision < 1 || decision > 3 ) {
                System.err.println("Opcion incorrecta. Adeus.");
            }

            System.out.println("Maquina do servidor de correo " + (decision==2?"POP3":"SMTP") + "?");
            String maquina = linhaComandos.readLine();

            int porto = 0;
            System.out.println("Porto do servidor de correo " + (decision==2?"POP3":"SMTP") + "?");
            do {
                try {
                    porto = new Integer(linhaComandos.readLine());
                } catch (NumberFormatException e) {
                    System.out.println("Porto incorrecto. Volva introducilo");
                    continue;
                }
                break;
            } while (true);

            switch (decision) {
                case 1:
                    System.out.println("Enderezo do remitente?");
                    String remitente = linhaComandos.readLine();

                    System.out.println("Enderezo do destinatario?");
                    String destinatario = linhaComandos.readLine();

                    System.out.println("Asunto da mensaxe");
                    String asunto = linhaComandos.readLine();

                    System.out.println("Texto da mensaxe? Rematar con <CRLF>.<CRLF>");
                    String texto = leAtaPunto(linhaComandos);

                    Correo correo = new Correo(remitente, destinatario, asunto, texto);
                    new Smtp(maquina, porto).enviar(correo);
                    break;
                case 2:
                    System.out.println("Usuario?");
                    String usuario = linhaComandos.readLine();

                    System.out.println("Contrasinal?");
                    String pass = linhaComandos.readLine();
                    new Pop3(maquina, porto).consultarCorreo(usuario, pass);
                    break;
                case 3:
                	InterfazGrafico.arranca(maquina, porto);
            }
        } catch (IOException e) {
            System.err.println("Produciuse un erro: " + e.getLocalizedMessage());
        } catch (Exception e) {
            System.err.println("Produciuse un erro: " + e.getLocalizedMessage());
        }
    }
}
